package com.cloudkinto.vo.order.outbound;

import com.cloudkinto.vo.file.FileMsg;
import com.cloudkinto.vo.file.FileVo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/**
 * @author long
 */
@Data
public class TransferOutboundDetail {
    private Long id;

    private String companyNameCode;

    /**
     * 租户id
     */
    @ApiModelProperty("租户id")
    private Long tenantId;

    /**
     * 仓库id
     */
    @ApiModelProperty("仓库id")
    private Long whId;

    /**
     * 客户id
     */
    @ApiModelProperty("客户id")
    private Long companyId;

    /**
     * 出库单号
     */
    @ApiModelProperty("出库单号")
    private String outboundNo;

    /**
     * 订单类型 1一件代发 2备货中转
     */
    @ApiModelProperty("订单类型 1一件代发 2备货中转")
    private Integer orderType;

    /**
     * 订单品种类型 1单品单件 2单品多件 3多品混合
     */
    @ApiModelProperty("订单品种类型 1单品单件 2单品多件 3多品混合")
    private Integer orderVarietyType;

    /**
     * 订单来源 1手动创建 2外部推送 3平台拉单 4Temu合作仓
     */
    @ApiModelProperty("订单来源 1手动创建 2外部推送 3平台拉单 4Temu合作仓")
    private Integer orderOrigin;

    /**
     * 目的地类型
     */
    @ApiModelProperty("目的地类型")
    private Integer destinationType;

    /**
     * 出库方式 1按产品出库 2按箱出库
     */
    @ApiModelProperty("出库方式 1按产品出库 2按箱出库")
    private Integer outboundMode;

    /**
     * FBA装运ID
     */
    @ApiModelProperty("FBA装运ID")
    private String fbaShipmentId;

    /**
     * 货件追踪码
     */
    @ApiModelProperty("货件追踪码")
    private String shipmentTrackingCode;

    /**
     * 出货托盘数
     */
    @ApiModelProperty("出货托盘数")
    private Integer outboundPalletsNum;

    /**
     * 物流渠道id
     */
    @ApiModelProperty("物流渠道id")
    private Long logisticsChannelId;

    /**
     * 面单文件
     */
    @ApiModelProperty("面单文件")
    private FileMsg labelFile;

    private Integer status;

    /**
     * 物流跟踪号
     */
    @ApiModelProperty("物流跟踪号")
    private String trackingNumber;

    /**
     * 销售平台
     */
    @ApiModelProperty("销售平台")
    private Integer salesPlatform;

    /**
     * 平台单号
     */
    @ApiModelProperty("平台单号")
    private String platformOrderNo;

    /**
     * 参考单号
     */
    @ApiModelProperty("参考单号")
    private String referenceNumber;

    /**
     * 签名服务
     */
    @ApiModelProperty("签名服务")
    private Integer signatureService;

    /**
     * 是否要求保险
     */
    @ApiModelProperty("是否要求保险")
    private Boolean insuranceFlag;

    /**
     * 保险金额
     */
    @ApiModelProperty("保险金额")
    private BigDecimal insureMoney;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;
    private String remark2;

    /**
     * 总数
     */
    @ApiModelProperty("总数 按箱就是总箱数 按产品就是总件数")
    private Integer totalNum;

    /**
     * 包裹数
     */
    @ApiModelProperty("包裹数")
    private Integer packageNum;

    /**
     * 收件人
     */
    @ApiModelProperty("收件人")
    private String receiver;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String phone;

    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;

    /**
     * 收件人税号
     */
    @ApiModelProperty("收件人税号")
    private String taxNum;

    /**
     * 公司名称
     */
    @ApiModelProperty("公司名称")
    private String companyName;

    private String companyTag;

    /**
     * 国家地区二字码
     */
    @ApiModelProperty("国家地区二字码")
    private String countryRegionCode;

    /**
     * 省/州
     */
    @ApiModelProperty("省/州")
    private String provinceName;

    /**
     * 城市名称
     */
    @ApiModelProperty("城市名称")
    private String cityName;

    /**
     * 邮编
     */
    @ApiModelProperty("邮编")
    private String postCode;

    /**
     * 门牌号
     */
    @ApiModelProperty("门牌号")
    private String houseNum;

    /**
     * 地址1
     */
    @ApiModelProperty("地址1")
    private String address1;

    /**
     * 地址2
     */
    @ApiModelProperty("地址2")
    private String address2;

    /**
     * 附件
     */
    @ApiModelProperty("附件")
    private String appendixIds;

    @ApiModelProperty("配送时间")
    private String deliveryDate;

    @ApiModelProperty("配送时间带")
    private String deliveryTimeName;

    /**
     * 面单打印时间
     */
    @ApiModelProperty("面单打印时间")
    private Date faceSheetPrintTime;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 提交时间
     */
    @ApiModelProperty("提交时间")
    private Date pushWmsTime;

    /**
     * 生成波次时间
     */
    @ApiModelProperty("生成波次时间")
    private Date createWaveTime;

    /**
     * 拣货时间
     */
    @ApiModelProperty("拣货时间")
    private Date pickingTime;

    /**
     * 复核时间
     */
    @ApiModelProperty("复核时间")
    private Date recheckTime;

    /**
     * 称重时间
     */
    @ApiModelProperty("称重时间")
    private Date weighTime;

    /**
     * 出库时间
     */
    @ApiModelProperty("出库时间")
    private Date outboundTime;

    /**
     * 取消事件
     */
    @ApiModelProperty("取消事件")
    private Date cancelTime;

    /**
     * 承运商
     */
    @ApiModelProperty("承运商")
    private String carrier;

    @ApiModelProperty("自定义渠道名")
    private String customizeChannelName;

    @ApiModelProperty("出库单包裹列表")
    private List<OutboundPackageDetail> outboundPackageList;

    /**
     * 产品信息
     */
    @ApiModelProperty("产品信息")
    private Collection<TransferOutboundDetail.TransferProductInfo> productInfoList;

    @ApiModelProperty("箱子信息")
    private List<TransferOutboundDetail.TransferBoxTypeInfo> boxTypeInfoList = new ArrayList<>();

//    @ApiModelProperty("仓库装箱明细")
//    private List<TransferOutboundDetail.PackDetail> packDetailList = new ArrayList<>();

    @Data
    public static class TransferProductInfo {
        private Long productId;
        private String sku;
        private String fnsku;
        private String productName;
        private Long categoryId;
        @ApiModelProperty("预报出库产品数")
        private Integer forecastQty;
        @ApiModelProperty("实际出库产品数")
        private Integer outboundQty;
        @ApiModelProperty("可用数量")
        private Integer availableAmount;
        @ApiModelProperty("申报价格")
        private BigDecimal declarePrice;
        private String currencyCode;
        @ApiModelProperty("是否换标 true:是 false:否")
        private Boolean changeBid;
        @ApiModelProperty("新条码")
        private String newBarcode;
        @ApiModelProperty("新条码标签文件")
        private Long newBarcodeLabelFile;
        @ApiModelProperty("标签文件")
        private FileVo fileVo;
    }

    @Data
    public static class TransferBoxTypeInfo {
        private String boxTypeNumber;
        private String customizeBarcode;
        private BigDecimal height;
        private BigDecimal length;
        private BigDecimal width;
        private BigDecimal weight;
        @ApiModelProperty("预报出库箱数")
        private Integer forecastBoxQty;
        @ApiModelProperty("实际出库箱数")
        private Integer outboundBoxQty;
        @ApiModelProperty("可用数量")
        private Integer availableAmount;
        private List<TransferBoxTypeInfoSku> skuList;

        @Data
        public static class TransferBoxTypeInfoSku {
            private Long productId;
            private String sku;
            private String productName;
            @ApiModelProperty("预报出库产品数")
            private Integer forecastQty;
            @ApiModelProperty("实际出库产品数")
            private Integer outboundQty;
        }
    }


    /*@Data
    public static class PackDetail {
        private Long id;
        private String boxTypeNumber;
        private BigDecimal height;
        private BigDecimal length;
        private BigDecimal width;
        private BigDecimal weight;
        @ApiModelProperty("箱数(出库箱数)")
        private Integer boxTotalQty;
        @ApiModelProperty("箱子内产品数(出库产品数)")
        private Integer skuTotalQty;
        @ApiModelProperty("产品种类(箱内产品数量)")
        private Integer skuKind;
        private List<TransferOutboundDetail.SkuInfo> skuList = new ArrayList<>();
    }*/

    @Data
    public static class SkuInfo {
        private Long productId;
        private String sku;
        private String productName;
        @ApiModelProperty("每箱数量")
        private Integer perBoxQty;
    }
}
